home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / c / etc / RCS / Td.man,v < prev    next >
Text File  |  1990-03-30  |  27KB  |  662 lines

  1. head     1.5;
  2. branch   ;
  3. access   ;
  4. symbols  ;
  5. locks    ; strict;
  6. comment  @@;
  7.  
  8.  
  9. 1.5
  10. date     90.03.30.15.45.44;  author brent;  state Exp;
  11. branches ;
  12. next     1.4;
  13.  
  14. 1.4
  15. date     89.07.19.09.00.04;  author ouster;  state Exp;
  16. branches ;
  17. next     1.3;
  18.  
  19. 1.3
  20. date     89.06.03.16.47.29;  author ouster;  state Exp;
  21. branches ;
  22. next     1.2;
  23.  
  24. 1.2
  25. date     89.04.06.09.32.05;  author ouster;  state Exp;
  26. branches ;
  27. next     1.1;
  28.  
  29. 1.1
  30. date     89.04.05.17.52.41;  author ouster;  state Exp;
  31. branches ;
  32. next     ;
  33.  
  34.  
  35. desc
  36. @@
  37.  
  38.  
  39. 1.5
  40. log
  41. @Updated call to Td_ControlCooked
  42. @
  43. text
  44. @'\" Copyright 1989 Regents of the University of California
  45. '\" Permission to use, copy, modify, and distribute this
  46. '\" documentation for any purpose and without fee is hereby
  47. '\" granted, provided that this notice appears in all copies.
  48. '\" The University of California makes no representations about
  49. '\" the suitability of this material for any purpose.  It is
  50. '\" provided "as is" without express or implied warranty.
  51. '\" 
  52. '\" $Header: /sprite/src/lib/c/etc/RCS/Td.man,v 1.4 89/07/19 09:00:04 ouster Exp Locker: brent $ SPRITE (Berkeley)
  53. '/" 
  54. .so \*(]ltmac.sprite
  55. .HS Td lib
  56. .BS
  57. '\" Note:  do not modify the .SH NAME line immediately below!
  58. .SH NAME
  59. Td_Create, Td_Delete, Td_PutRaw, Td_GetRaw, Td_ControlRaw,
  60. Td_Open, Td_Close, Td_PutCooked, Td_GetCooked,
  61. Td_ControlCooked, Td_CreatePdev,
  62. Td_DeletePdev \- Terminal driver implementing 4.3 BSD operations.
  63. .SH SYNOPSIS
  64. .nf
  65. \fB#include <td.h>\fR
  66. .sp
  67. Td_Terminal
  68. \fBTd_Create\fR(\fIbufferSize\fR, \fIcookedProc\fR, \fIcookedData\fR, \fIrawProc\fR, \fIrawData\fR)
  69. .sp
  70. \fBTd_Delete\fR(\fIterminal\fR)
  71. .sp
  72. \fBTd_PutRaw\fR(\fIterminal\fR, \fInumBytes\fR, \fIbuffer\fR)
  73. .sp
  74. int
  75. \fBTd_GetRaw\fR(\fIterminal\fR, \fInumBytes\fR, \fIbuffer\fR)
  76. .sp
  77. \fBTd_ControlRaw\fR(\fIterminal\fR, \fIoperation\fR)
  78. .sp
  79. int
  80. \fBTd_Open\fR(\fIterminal\fR, \fIselectBitsPtr\fR)
  81. .sp
  82. \fBTd_Close\fR(\fIterminal\fR)
  83. .sp
  84. int
  85. \fBTd_PutCooked\fR(\fIterminal\fR, \fInumBytesPtr\fR, \fIbuffer\fR, \fIsigNumPtr\fR, \fIselectBitsPtr\fR)
  86. .sp
  87. int
  88. \fBTd_GetCooked\fR(\fIterminal\fR, \fIpID\fR, \fIfamilyID\fR, \fInumBytesPtr\fR, \fIbuffer\fR, \fIsigNumPtr\fR, \fIselectBitsPtr\fR)
  89. .sp
  90. int
  91. \fBTd_ControlCooked\fR(\fIterminal\fR, \fIcommand\fR, \fIformat\fR, \fIinputSize\fR, \fIinput\fR, \fIoutputSizePtr\fR, \fIoutput\fR, \fIsigNumPtr\fR, \fIselectBitsPtr\fR)
  92. .sp
  93. Td_Pdev
  94. \fBTd_CreatePdev\fR(\fIname\fR, \fIrealNamePtr\fR, \fItermPtr\fR, \fIrawProc\fR, \fIrawData\fR)
  95. .sp
  96. \fBTd_DeletePdev\fR(\fIttyPdev\fR)
  97. .SH ARGUMENTS
  98. .AS Td_Terminal (*cookedProc)()
  99. .AP int bufferSize in
  100. Size of output buffer to use for terminal.  This is not an exact
  101. specification, in that the terminal driver may actually allow more
  102. characters than this to be buffered, but it will always allow at
  103. least this many characters to be buffered.
  104. .AP int (*cookedProc)() in
  105. Procedure to call for control operations on cooked side of driver.
  106. .AP ClientData cookedData in
  107. Additional value to pass to \fIcookedProc\fR.
  108. .AP int (*rawProc)() in
  109. Procedure to call for control operations on raw side of driver.
  110. .AP ClientData rawData in
  111. Additional value to pass to \fIrawProc\fR.
  112. .AP Td_Terminal terminal in
  113. Token for terminal;  must have been returned by some previous call
  114. to \fBTd_Create\fR.
  115. .AP int numBytes in
  116. Total number of bytes to get or put for/from raw side of terminal.
  117. .AP char *buffer in/out
  118. Buffer containing characters to be written, or containing space in
  119. which to place characters being read.
  120. .AP int operation in
  121. Control operation being invoked from raw side of terminal.  Currently
  122. no operations are defined.
  123. .AP int *selectBitsPtr in/out
  124. Points to word whose bits (\fBFS_READABLE\fR and \fBFS_WRITABLE\fR)
  125. indicate whether read or write operations can complete
  126. successfully.  Different procedures may modify either or both of
  127. these bits.
  128. .AP int *numBytesPtr in/out
  129. Points to maximum number of bytes to read or write.  Gets overwritten
  130. with actual number of bytes read or written.
  131. .AP int *sigNumPtr out
  132. Overwritten with signal number to apply to invoking process.  Zero
  133. means no signal.
  134. .AP int pID in
  135. Identifier of process invoking operation.
  136. .AP int familyID in
  137. Process group that \fIpID\fR belongs to.
  138. .AP int command in
  139. Number of IOControl operation.  Note:  these are Sprite IOControl
  140. numbers, not UNIX ioctl numbers.  See \fB<dev/tty.h>\fR for definitions.
  141. .AP Fmt_Format format in
  142. Byte ordering and alignment format for the buffers used in an IOControl.
  143. Usually the constant \fBFMT_MY_FORMAT\fP can be passed in for this parameter.
  144. .AP int inputSize in
  145. Number of bytes of information in \fIinput\fR
  146. .AP char *input in
  147. Input buffer for IOControl operation.  Its structure depends on the
  148. IOControl.
  149. .AP int *outputSizePtr in/out
  150. Points to word specifiying total number of bytes of output buffer
  151. space available at \fIoutput\fR.  Modified to hold
  152. the actual number of output bytes provided by the IOControl.
  153. .AP char *output in
  154. Output buffer for IOControl operation.  Its structure depends on the
  155. IOControl.
  156. .AP char *name in
  157. Name of file to use for terminal pseudo-device.  May be either full
  158. name or root.
  159. .AP char **realNamePtr out
  160. Where to store actual name of terminal pseudo-device used.  NULL means
  161. \fIname\fR is a root;  non-NULL means \fIname\fR is the full path
  162. name.
  163. .AP Td_Terminal *termPtr out
  164. If non-NULL, token for terminal gets stored in the word pointed to
  165. by \fItermPtr\fR.
  166. .AP Td_Pdev ttyPdev in
  167. Token for terminal-driven pseudo-device to destroy.  Must have been
  168. returned previously by \fBTd_CreatePdev\fR.
  169. .BE
  170.  
  171. .SH INTRODUCTION
  172. .PP
  173. The Td library procedures implement a terminal driver with
  174. the same features as the terminal driver implemented in the 4.3 BSD
  175. kernel.  The data structures managed
  176. by the Td library are called Td_Terminals and have
  177. two interfaces:  cooked and raw.  The raw interface is used to
  178. communicate between the Td procedures and the low-level device
  179. corresponding to the terminal (usually a serial line device
  180. or a window on a screen).  The cooked interface is used to communicate
  181. with processes accessing the 4.3-BSD-like terminal.  In between, the
  182. Td library provides input and output character buffering, echoing
  183. and line editing, flow control, interrupt characters, and all the other
  184. features of the 4.3 BSD terminal driver.
  185. .PP
  186. Each of the cooked and raw interfaces has at least four procedures associated
  187. with it.  Three of the procedures are provided by Td:  one to pass
  188. characters into the terminal driver (e.g. a character that was just
  189. typed on the keyboard, or a character that a user process wishes
  190. to ouput on the terminal), one to extract characters from
  191. the terminal driver (e.g. to pass them to a waiting user process, or
  192. to output them onto the terminal), and one to invoke control operations
  193. on the terminal.  The fourth procedure for each interface is provided
  194. by the program in which Td is embedded.  These procedures are called
  195. back by Td to notify the program of various events, for example, that
  196. characters are waiting in the terminal's output buffer, or that a
  197. full line is present in the terminal's input buffer.
  198. .PP
  199. Most of the procedures in the Td library are generic in
  200. that they can be used in many different situations, including both
  201. user programs and the Sprite kernel.  Two additional procedures,
  202. \fBTd_CreatePdev\fR and \fBTd_DeletePdev\fR are provided to connect
  203. the cooked side of a Td_Terminal to a pseudo-device.  These procedures
  204. are used by user-level Sprite programs like \fBrlogind\fR
  205. and window-based terminal emulators.
  206.  
  207. .SH "CREATING AND DELETING TERMINALS"
  208. .PP
  209. The \fBTd_Create\fR procedure is used to create a Td_Terminal.  It
  210. returns a token that must be passed to most of the other Td procedures.
  211. Several Td_Terminals may exist at the same time, each created by a
  212. separate call to \fBTd_Create\fR.  Each Td_Terminal corresponds to
  213. one logical terminal with its own input and output buffers.  The
  214. \fIcookedProc\fR and \fIrawProc\fR procedures, and their associated
  215. ClientData values, are used to invoke control operations on the two
  216. sides of the terminal.  The use of these two procedures
  217. is described in the sections below.  The \fIbufferSize\fR argument
  218. is described in the \fBBUFFERING\fR section below.
  219. .PP
  220. \fBTd_Delete\fR simulates a hangup on a Td_Terminal,
  221. then destroys all of the state associated with the terminal.
  222. After it is called, the \fIterminal\fR argument should never be used
  223. again by the caller.
  224.  
  225. .SH "RAW INTERFACE"
  226. .PP
  227. The raw interface is used to communicate between the terminal driver
  228. and the ``dumb'' terminal device.  It consists of the three procedures
  229. \fBTd_PutRaw\fR, \fBTd_GetRaw\fR, \fBTd_ControlRaw\fR, and the
  230. \fIrawProc\fR procedure passed to \fBTd_Create\fR.
  231. .PP
  232. When characters are typed on the keyboard associated with the raw terminal,
  233. they should be passed to the temrinal driver by calling \fBTd_PutRaw\fR.
  234. The Td library will then perform input processing such as echoing and
  235. line editing.
  236. .PP
  237. The procedure \fBTd_GetRaw\fR should be invoked to remove characters
  238. from the terminal's output buffer and copy them to \fIbuffer\fR.
  239. The return value indicates how many characters were actually copied,
  240. up to either \fInumBytes\fR or the total number of characters in
  241. the output buffer.  The return value is zero if the output buffer
  242. is empty.  The caller of \fBTd_GetRaw\fR should then pass the characters
  243. to the raw serial device, or display them on the screen if the terminal
  244. is being emulated in a window.  Note that it is up to the application
  245. in which Td is embedded to decide when to call \fBTd_GetRaw\fR.  However,
  246. Td calls \fIrawProc\fR to notify the application that the terminal's
  247. output buffer contains characters;  see below for details.
  248. .PP
  249. The procedure \fBTd_ControlRaw\fR should be called when certain
  250. interesting events occur on the raw terminal.  The \fIoperation\fR
  251. argument identifies the event that occurred, and must be one of:
  252. .RS
  253. .IP \fBTD_BREAK\fR 20
  254. Means that a break just occurred on the raw device.  \fBTd_ControlRaw\fR
  255. should only be called when the break condition ends.
  256. .IP \fBTD_GOT_CARRIER\fR 20
  257. Means that there is now carrier present on the raw device (e.g. a
  258. modem connection was just made).
  259. .IP \fBTD_LOST_CARRIER\fR 20
  260. Means that carrier just went away on the raw device (e.g. the party
  261. on the other end hung up the phone).
  262. .RE
  263. .PP
  264. The Td module will invoke the procedure \fIrawProc\fR, which was
  265. passed to \fBTd_Create\fR, to ask for special actions on the raw terminal
  266. device, or to provide additional information that may be useful in
  267. managing the raw terminal device.  \fIRawProc\fR must have the
  268. following structure:
  269. .DS
  270. \fCint
  271. rawProc(rawData, operation, inputSize, input, outputSize, output)
  272.     ClientData rawData;
  273.     int operation;
  274.     int inputSize;
  275.     char *input;
  276.     int outputSize;
  277.     char *output;
  278. {
  279.  ...
  280. }\fR
  281. .DE
  282. The \fIrawData\fR argument will be the same as the \fIrawData\fR
  283. argument passed to \fBTd_Create\fR.  It usually refers to a data structure
  284. describing the raw device, which will be used by \fIrawProc\fR.  The
  285. \fIoperation\fR parameter gives the reason for the call, the \fIinputSize\fR
  286. and \fIinput\fR arguments describe an area of data that Td is making
  287. available to \fIrawProc\fR, and \fIoutputSize\fR and \fIoutput\fR
  288. describe a buffer in which \fIrawProc\fR may place data that it wishes
  289. to return to Td.  The return value from \fIrawProc\fR indicates how many
  290. bytes of data were actually placed at \fIoutput\fR;  it must not be
  291. greater than \fIouptutSize\fR.  At present, \fIoperation\fR must be
  292. one of the following:
  293. .RS
  294. .IP \fBTD_RAW_START_BREAK\fR 30
  295. Initiate a break condition on the raw device, if the device supports it.
  296. There is no input data or output data for this operation.
  297. .IP \fBTD_RAW_STOP_BREAK\fR 30
  298. End a break condition on the raw device, if the device supports it.
  299. There is no input data or output data for this operation.
  300. .IP \fBTD_RAW_SET_DTR\fR 30
  301. Set the ``data terminal ready'' condition on the raw device, if
  302. it supports such an operation.
  303. There is no input data or output data for this operation.
  304. .IP \fBTD_RAW_CLEAR_DTR\fR 30
  305. Clear the ``data terminal ready'' condition on the raw device, if
  306. it supports such an operation.
  307. There is no input data or output data for this operation.
  308. .IP \fBTD_RAW_SHUTDOWN\fR 30
  309. The terminal has been closed and is being shut down.  The raw
  310. device should now be shut down too (e.g. hang up a modem).
  311. There is no input data or output data for this operation.
  312. .IP \fBTD_RAW_OUTPUT_READY\fR 30
  313. This operation indicates that the output buffer for the terminal
  314. has just become non-empty.  At some point in the future, the application
  315. should invoke \fBTd_GetRaw\fR and output the characters to the device.
  316. There is no input data or output data for this operation.
  317. .IP \fBTD_RAW_FLUSH_OUTPUT\fR 30
  318. If there are any characters buffered for output on the raw device
  319. but not yet output, they should be discarded without outputting them.
  320. There is no input data or output data for this operation.
  321. .IP \fBTD_RAW_FLOW_CHARS\fR 30
  322. The flow-control characters for the terminal have just been modified.
  323. The \fIinput\fR argument points to a structure with the following
  324. format:
  325. .DS
  326. .ta 4c
  327. \fCtypedef struct {
  328.     char stop;
  329.     char start;
  330. } Td_FlowChars;\fR
  331. .DE
  332. .IP
  333. Whenever \fIstop\fR is received from the raw terminal, output should
  334. be stopped until \fIstart\fR is received.  \fIStop\fR and \fIstart\fR
  335. may be the same character.
  336. This call is made so that the driver for the raw device may implement
  337. flow control directly in order to provide faster response to the
  338. \fIstart\fR and \fIstop\fR characters.  The raw device driver may
  339. ignore these calls and simply pass the flow control characters to
  340. the terminal driver, in which case Td will implement flow control,
  341. albeit with slower response.  If either \fIstop\fR or \fIstart\fR
  342. is -1, then the raw driver must not implement flow control.  There is
  343. no output data for this operation.
  344. .IP \fBTD_RAW_SET_BAUD_RATE\fR 30
  345. Someone has just asked to change the baud rate for the device.  Both the
  346. \fIinput\fR and \fIoutput\fR arguments point to structures with the
  347. following format:
  348. .DS
  349. .ta 4c
  350. \fCtypedef struct {
  351.     char ispeed;
  352.     char ospeed;
  353. } Td_BaudRate;\fR
  354. .DE
  355. .IP
  356. The \fBispeed\fR and \fBospeed\fR fields have the same values as
  357. they would in an \fBsgttyb\fR structure, such as \fBB9600\fR.  The
  358. \fIinput\fR argument gives the requested baud rates.  \fIRawProc\fR
  359. may either accept these speeds or override them and return the
  360. actual speeds it used in the \fIoutput\fR area.  If the \fIinput\fR
  361. speeds are accepted, then \fIrawProc\fR need not modify the \fIoutput\fR
  362. area;  it can simply return 0.
  363. .IP \fBTD_RAW_GET_BAUD_RATE\fR 30
  364. This operation is invoked to fetch the current input and output speeds
  365. for the raw device.  There is no \fIinput\fR area, but \fIoutput\fR
  366. refers to a \fBTd_BaudRate\fR structure as described above for
  367. \fBTD_RAW_SET_BAUD_RATE\fR.  \fIRawProc\fR should fill in the current
  368. speeds for the device at \fI*output\fR and return \fBsizeof(Td_BaudRate)\fR.
  369. .RE
  370.  
  371. .SH "COOKED INTERFACE"
  372. .PP
  373. The cooked interface is used to communicate between the terminal
  374. driver and the processes wishing to access a device with full
  375. 4.3 BSD terminal semantics.  As with the raw interface, it consists
  376. of a collection of Td procedures that the enclosing application
  377. invokes, plus one procedure in the enclosing application that
  378. Td invokes.
  379. .PP
  380. Whenever a process attempts to open the terminal device, the
  381. procedure \fBTd_Open\fR should be called.  If the terminal is
  382. in ``exclusive'' mode (meaning opens are being refused), then
  383. a UNIX error number is returned.  Otherwise zero is returned and
  384. the \fBFS_READABLE\fR and \fBFS_WRITABLE\fR bits of
  385. \fI*selectBitsPtr\fR are set to indicate whether there are input
  386. characters or output buffer space available, respectively.
  387. .PP
  388. When the terminal is closed, \fBTd_Close\fR should be invoked.
  389. There should be exactly one \fBTd_Close\fR call for each \fBTd_Open\fR
  390. call:  if an open stream is \fBdup\fR-ed, \fBTd_Close\fR shouldn't
  391. be called until the last \fBdup\fR-ed copy is closed.
  392. .PP
  393. When a process writes data to the cooked terminal, \fBTd_PutCooked\fR
  394. should be invoked to pass the data to the terminal driver.  The
  395. characters will be added to the terminal's output buffer after
  396. performing output processing on them.  The return value is always
  397. zero (meaning that the characters are always accepted).  The
  398. \fBFS_WRITABLE\fR bit in \fI*selectBitsPtr\fR will be updated to reflect
  399. whether the terminal's output buffer is now ``full'' (see the
  400. \fBBUFFERING\fR section below for more on what this means).  If so, then
  401. no more calls should be made to \fBTd_PutCooked\fR until the terminal
  402. driver gives notice that there is more space in the output buffer
  403. (this is done by calling \fIcookedProc\fR as described below).
  404. \fBTd_PutCooked\fR overwrites the value at \fI*sigNumPtr\fR;  if
  405. the value written is non-zero then it is a UNIX signal number that should
  406. be applied to the calling process.
  407. .PP
  408. When a process wishes to read characters from the cooked terminal,
  409. \fBTd_GetCooked\fR should be called.  This procedure will remove characters
  410. from the terminal's input buffer (up to \fI*numBytesPtr\fR of them)
  411. and copy them to \fIbuffer\fR.  The
  412. value at \fI*numBytesPtr\fR will be updated to reflect the actual
  413. number of characters returned.  The return value from \fBTd_GetCooked\fR
  414. will normally be zero;  if an error occurred, then the return value
  415. will be a UNIX error number.  If the terminal's input buffer is empty,
  416. then the return value will be \fBEWOULDBLOCK\fR and \fI*numBytesPtr\fR
  417. will be set to zero.  The \fBFS_READABLE\fR bit of \fI*selectBitsPtr\fR
  418. will be updated to reflect whether there are still more characters ready in
  419. the terminal's input buffer.  \fBTd_PutCooked\fR overwrites the
  420. value at \fI*sigNumPtr\fR;  if
  421. the value written is non-zero then it is a UNIX signal number that should
  422. be applied to the calling process (this is used, for example, to
  423. generate \fBSIGTTIN\fR signals).
  424. .PP
  425. When a process invokes an IOControl operation on the terminal,
  426. \fBTd_ControlCooked\fR should be called.  The arguments to
  427. \fBTd_ControlCooked\fR indicate the IOControl number (\fIcommand\fR),
  428. plus an input buffer (\fIinputSize\fR and \fIinput\fR) and an
  429. output buffer (\fI*outputSizePtr\fR and \fIoutput\fR).  The
  430. value at \fI*outputSizePtr\fR will be modified to reflect the
  431. actualy number of bytes of output data written at \fIoutput\fR
  432. (this will be no more than the original value of \fI*outputSizePtr\fR).
  433. The contents of the input and output buffers are determined by the
  434. specific \fIcommand\fR being requested.  See the documentation on
  435. the 4.3 BSD terminal driver for details.
  436. The byte ordering and structure alignment of the input and output buffers
  437. is specified by the \fIformat\fP parameter.  The normal value to pass in
  438. is for \fIformat\fP is \fBFMT_MY_FORMAT\fP, which is defined in ``fmt.h''.
  439. \fBTd_ControlCooked\fR will
  440. reformat the input and output buffers, if necessary, to match the
  441. byte ordering of a remote client process.
  442. \fBTd_ControlCooked\fR
  443. will modify the \fBFS_READABLE\fR and \fBFS_WRITABLE\fR bits of
  444. \fI*selectBitsPtr\fR to reflect the state of the terminal's
  445. input and output buffers when the IOControl completes.
  446. \fBTd_PutCooked\fR overwrites the value at \fI*sigNumPtr\fR;  if
  447. the value written is non-zero then it is a UNIX signal number that should
  448. be applied to the calling process.
  449. .PP
  450. The Td library will invoke the \fIcookedProc\fR, which was passed
  451. as an argument to \fBTd_Create\fR, when it wishes to give notice
  452. of interesting events related to the cooked side of the terminal.
  453. \fICookedProc\fR should have the following structure:
  454. .DS
  455. \fCint
  456. cookedProc(cookedData, operation, inputSize, input, outputSize, output)
  457.     ClientData cookedData;
  458.     int operation;
  459.     int inputSize;
  460.     char *input;
  461.     int outputSize;
  462.     char *output;
  463. {
  464.  ...
  465. }\fR
  466. .DE
  467. The \fIcookedData\fR argument will be the same as the \fIcookedData\fR
  468. argument passed to \fBTd_Create\fR.  It usually refers to a data structure
  469. describing the interface to processes using the cooked terminal.
  470. The other arguments to \fIcookedProc\fR and its result
  471. have the same meaning as the arguments and result
  472. for \fIrawProc\fR, except that  \fIoperation\fR has different meanings.  The
  473. values currently defined for \fIoperation\fR are:
  474. .RS
  475. .IP \fBTD_COOKED_SIGNAL\fR 30
  476. A signal should be generated for the controlling process group
  477. associated with the terminal.  \fIInput\fR will point to a structure
  478. with the following format:
  479. .DS
  480. .ta 4c
  481. \fCtypedef struct {
  482.     int sigNum;
  483.     int groupID;
  484. } Td_Signal;\fR
  485. .DE
  486. .IP
  487. The \fIsigNum\fR field gives a UNIX signal number (e.g. \fBSIGINT\fR),
  488. and \fIgroupID\fR identifies the controlling process group for
  489. the terminal.  \fICookedProc\fR is not expected
  490. to return any output data.
  491. .IP \fBTD_COOKED_READS_OK\fR 30
  492. There is now readable data in the input buffer associated with the
  493. terminal, so that the next call to \fBTd_GetCooked\fR will not
  494. return \fBEWOULDBLOCK\fR.  If there is a waiting process, it should
  495. probably be woken up.  There is no input data or output data for
  496. this operation.
  497. .IP \fBTD_COOKED_WRITES_OK\fR 30
  498. The output buffer for the terminal is now empty.  If there is a process
  499. waiting to do output, it should probably be woken up.
  500. There is no input data or output data for this operation.
  501. .RE
  502.  
  503. .SH "PSEUDO-DEVICE INTERFACE"
  504. .PP
  505. The Td library also contains routines to connect the cooked side of
  506. a terminal to a pseudo-device.  The pseudo-device routines use the
  507. facilities of the Pdev library, which in turn requires that the
  508. application use the \fBFs_Select\fR library to manage I/O channels.
  509. The non-pseudo-device portions of the Td library may be used without
  510. also using \fBFs_Select\fR.
  511. .PP
  512. \fBTd_CreatePdev\fR creates a pseudo-device file and arranges for the
  513. file to have terminal-like behavior by associating it with a terminal
  514. managed by the Td library.  Once \fBTd_CreatePdev\fR has been called,
  515. the pseudo-device and the cooked side of its terminal will be managed
  516. automatically.  However, it is up to \fBTd_CreatePdev\fR's caller to manage
  517. the raw side of the pseudo-terminal.  The \fIrawProc\fR and \fIrawData\fR
  518. arguments to \fBTd_CreatePdev\fR are the same as the corresponding arguments
  519. to \fBTd_Create\fR (\fBTd_CreatePdev\fR passes them to \fBTd_Create\fR
  520. when it creates the terminal).  If the \fItermPtr\fR argument to
  521. \fBTd_CreatePdev\fR is not NULL, then \fBTd_CreatePdev\fR stores
  522. the Td_Terminal token for the pseudo-terminal at \fI*termPtr\fR; this
  523. allows the application to invoke procedures like \fBTd_PutRaw\fR.
  524. .PP
  525. The name of the pseudo-device file created by \fBTd_CreatePdev\fR
  526. may be specified in either of two ways.  If the \fIrealNamePtr\fR
  527. argument to \fBTd_CreatePdev\fR is NULL, then the \fIname\fR
  528. argument gives the complete name of the pseudo-device file.
  529. If \fIrealNamePtr\fR is not NULL, then the pseudo-device file will
  530. be created in a host-specific directory for the machine on which
  531. the program is running, and the file name will have the form
  532. \fInameXX\fR, where \fIXX\fR is a small integer chosen to avoid
  533. conflict with other files that have the same \fIname\fR.  A pointer
  534. to the complete name will be stored in \fI*realNamePtr\fR;  the
  535. storage for the name is allocated by \fBmalloc\fR and should eventually
  536. be freed by \fBTd_CreatePdev\fR's caller.
  537. .PP
  538. \fBTd_CreatePdev\fR normally returns a token for the pseudo-terminal.
  539. If the pseudo-device couldn't be opened, then NULL is
  540. returned and the variable \fBpdev_ErrorMsg\fR points to a string
  541. describing what went wrong.
  542. .PP
  543. The only use for the token returned by \fBTd_CreatePdev\fR
  544. is to pass it to \fBTd_DeletePdev\fR.
  545. When this happens, the pseudo-device is closed and the associated
  546. terminal is destroyed by calling \fBTd_Delete\fR.
  547.  
  548. .SH BUFFERING
  549. .PP
  550. The input buffer for a Td_Terminal grows automatically to accommodate
  551. as much data as is present:  there is no upper limit on its size.  The
  552. output buffer will also grow automatically:  \fBTd_PutCooked\fR
  553. always accepts all the data passed to it.  However, it is usually
  554. a bad idea to buffer a very large number of characters on output, since
  555. these characters will have to be output even if the process is killed
  556. with a control-C.  The \fIbufferSize\fR argument to \fBTd_Create\fR
  557. specifies a nominal output buffer size;  whenever more than this many
  558. characters are buffered, \fBTd_PutCooked\fR will turn off the
  559. \fBFS_WRITABLE\fR bit in \fI*selectBitsPtr\fR to indicate that the
  560. buffer is nominally full;  the enclosing application should then
  561. refuse to accept more characters for output (e.g., by suspending
  562. the process).  When the output buffer empties, \fIcookedProc\fR
  563. will be invoked with a \fBTD_COOKED_WRITES_OK\fR command.
  564.  
  565. .SH EXAMPLES
  566. .PP
  567. The best way to learn how to use the Td library is to look
  568. at examples in the Sprite source code.  The simplest example is the
  569. \fBmktty\fR program;  other examples are \fBrlogind\fR (the remote-login
  570. server) and \fBtx\fR (a window-based terminal emulator).
  571.  
  572. .SH KEYWORDS
  573. 4.3 BSD, pseudo-device, terminal driver
  574. @
  575.  
  576.  
  577. 1.4
  578. log
  579. @Document support for baud-rate changes.
  580. @
  581. text
  582. @d9 1
  583. a9 1
  584. '\" $Header: /sprite/src/lib/c/etc/RCS/Td.man,v 1.3 89/06/03 16:47:29 ouster Exp Locker: ouster $ SPRITE (Berkeley)
  585. d48 1
  586. a48 1
  587. \fBTd_ControlCooked\fR(\fIterminal\fR, \fIcommand\fR, \fIinputSize\fR, \fIinput\fR, \fIoutputSizePtr\fR, \fIoutput\fR, \fIsigNumPtr\fR, \fIselectBitsPtr\fR)
  588. d98 3
  589. d392 8
  590. a399 1
  591. the 4.3 BSD terminal driver for details.  \fBTd_ControlCooked\fR
  592. @
  593.  
  594.  
  595. 1.3
  596. log
  597. @Several changes:  TD_HANGUP is now TD_GOT_CARRIER and TD_LOST_CARRIER,
  598. added TD_RAW_BAUD_RATE callback, changed TD_COOKED_SIGNAL to provide
  599. both signal number and controlling process group.
  600. @
  601. text
  602. @d9 1
  603. a9 1
  604. '\" $Header: /sprite/src/lib/c/etc/RCS/Td.man,v 1.2 89/04/06 09:32:05 ouster Exp Locker: ouster $ SPRITE (Berkeley)
  605. d298 4
  606. a301 3
  607. .IP \fBTD_RAW_BAUD_RATE\fR 30
  608. The requested baud rate for the device has just been modified.  The
  609. \fBinput\fR argument points to a structure with the following format:
  610. d310 13
  611. a322 3
  612. The \fIispeed\fR and \fIospeed\fR fields have the same values as
  613. they would in an \fBsgttyb\fR structure, such as \fBB9600\fR.  There is
  614. no output data for this operation.
  615. @
  616.  
  617.  
  618. 1.2
  619. log
  620. @Trivial editorial change.
  621. @
  622. text
  623. @d9 1
  624. a9 1
  625. '\" $Header: /sprite/src/lib/c/etc/RCS/Td.man,v 1.1 89/04/05 17:52:41 ouster Exp $ SPRITE (Berkeley)
  626. d194 1
  627. a194 1
  628. up to either \fInumBytes\fR or that total number of characters in
  629. d210 6
  630. a215 3
  631. .IP \fBTD_HANGUP\fR 20
  632. Means that a hangup just occurred on the modem associated with the
  633. raw device.
  634. d262 3
  635. a264 3
  636. .IP \fBTD_RAW_HANGUP\fR 30
  637. Hangup the modem associated with the raw device,
  638. if the device supports it.
  639. d296 16
  640. a311 1
  641. is -1, then the raw driver must not implement flow control.
  642. d413 13
  643. a425 3
  644. associated with the terminal.  \fIInput\fR will contain a single
  645. integer value, which is the UNIX signal number to send to the
  646. process group (e.g. \fBSIGINT\fR).  \fICookedProc\fR is not expected
  647. @
  648.  
  649.  
  650. 1.1
  651. log
  652. @Initial revision
  653. @
  654. text
  655. @d9 1
  656. a9 1
  657. '\" $Header: /sprite/lib/forms/RCS/proto.man,v 1.5 89/01/27 08:36:02 ouster Exp $ SPRITE (Berkeley)
  658. d174 2
  659. a175 1
  660. \fBTd_Delete\fR destroys all of the state associated with a Td_Terminal.
  661. @
  662.